/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sv.com.intesal.seguridad.controlador;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import sv.com.intesal.clases.Mensaje;
import sv.com.intesal.conexion.cConexion;
import sv.com.intesal.seguridad.bean.Menu;
import sv.com.intesal.seguridad.bean.Perfil;
import sv.com.intesal.seguridad.bean.PerfilMenu;
import sv.com.intesal.seguridad.sql.SQLPerfilMenu;

/**
 *
 * @author ejerez
 */
public class PerfilMenuControlador {

    public List<PerfilMenu> getPerfilMenu_x_Perfil(Integer codigo_p) throws Exception {

        List<PerfilMenu> lista = new ArrayList<PerfilMenu>();
        try {
            PreparedStatement ps = cConexion.conectar().prepareStatement(SQLPerfilMenu.getPerfilMenu_x_Perfil);
            ps.setInt(1, codigo_p);
            ResultSet rs = ps.executeQuery();

            while (rs.next()) {

                Perfil p = new Perfil();
                p.setCodigo_p(rs.getInt("codigo_p"));
                p.setNombre_p(rs.getString("nombre_p"));


                Menu me = new Menu();
                me.setCodigo_m(rs.getInt("codigo_m"));
                me.setDescripcion_m(rs.getString("descripcion_m"));
                me.setNombre_m(rs.getString("nombre_m"));
                me.setOrden_m(rs.getString("orden_m"));
                me.setEstado_m(rs.getString("estado_m"));

                me.setFiltro_estado_m(false);
                if (me.getEstado_m().equals("S")) {
                    me.setFiltro_estado_m(true);
                }

                PerfilMenu pm = new PerfilMenu();
                pm.setCodigo_pm(rs.getInt("codigo_pm"));
                pm.setEstado_pm(rs.getString("estado_pm"));

                pm.setFiltro_estado_pm(false);
                if (pm.getEstado_pm().equals("S")) {
                    pm.setFiltro_estado_pm(true);
                }

                pm.setPerfil(p);
                pm.setMenu(me);
                lista.add(pm);
            }
            ps.close();
            rs.close();

            return lista;
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    public void inserPerfilMenu() throws Exception {
        try {
            PreparedStatement ps = cConexion.conectar().prepareStatement(SQLPerfilMenu.insertPerfilMenu);
            ps.executeUpdate();
            ps.close();
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    public void updatePerfilMenu(PerfilMenu pm) throws Exception {
        try {
            PreparedStatement ps = cConexion.conectar().prepareStatement(SQLPerfilMenu.updatePerfilMenu);
            String yes = "S";
            String no = "N";

            if (pm.getFiltro_estado_pm() == false) {
                ps.setString(1, no);
            } else {
                ps.setString(1, yes);
            }
            ps.setInt(2, pm.getCodigo_pm());
            ps.executeUpdate();

            Mensaje m = new Mensaje();
            m.messageInfo(m.getImodificada());
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    public void updatePerfilMenu_Especiales(PerfilMenu pm) throws Exception {
        PreparedStatement ps = null;
        Connection cnn = null;
        try {
            cnn = cConexion.conectar();

            if (pm.getFiltro_all_TipoMenu() == true && pm.getFiltro_all_Perfiles() == true) {
                /*UPDATE TODOSO LOS MODULOS Y PERFILES*/
                ps = cnn.prepareStatement(SQLPerfilMenu.updatePerfilMenuAll);
            } else if (pm.getFiltro_all_TipoMenu() == true) {
                /*UPDATE TODOS LOS MENU POR TIPO_MENU */
                ps = cnn.prepareStatement(SQLPerfilMenu.updatePerfilMenu_x_TipoMenu);
                ps.setInt(2, pm.getMenu().getTipoMenu().getCodigo_tm());
            } else if (pm.getFiltro_all_Perfiles() == true) {
                /*UPDATE TODOS LOS MENU X PERFIL*/
                ps = cnn.prepareStatement(SQLPerfilMenu.updatePerfilMenu_x_Perfil);
                ps.setInt(2, pm.getPerfil().getCodigo_p());
            } else {
                ps = cnn.prepareStatement(SQLPerfilMenu.updatePerfilMenuAll);
            }

            String no = "N";
            String yes = "S";
            if (pm.getFiltro_estado_pm() == true) {
                ps.setString(1, no);
            } else {
                ps.setString(1, yes);
            }
            ps.executeUpdate();
            cnn.close();
            ps.close();

            Mensaje m = new Mensaje();
            m.messageInfo(m.getImodificada());
        } catch (Exception e) {
            throw new Exception(e);
        }

    }
}
